package leetcode;


/*

接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水

输入：height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出：6

思路：
如果当前位置能存储水，那么当前位置左边必定有高于当前位置的柱子，且当前位置的右边必定有高于当前位置的柱子。
而当前位置能接多少水，取决于两边最高的柱子中较低的那个。
 */

public class Code42 {

    public static int trap(int[] height) {
        if(null == height || height.length < 3){
            return 0;
        }

        int size = height.length;
        int[] left = new int[height.length];
        int[] right = new int[height.length];

        //得到每个位置上左侧最高的位置
        for(int i =1; i< size; i++){
            //左侧最高的柱子
            left[i] = Math.max(left[i - 1], height[i-1]);
        }
        //得到每个位置右侧最高的位置
        for(int i = size-2; i>=0; i--){
            right[i] = Math.max(height[i+1], right[i+1]);
        }
        int count = 0;

        for(int i= 0;i<size;i++){
            int min = Math.min(left[i], right[i]);
            int cur = height[i];
            if(min > cur){
                count = count + (min - cur);
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] len = new int[]{2,0,2};
        System.out.println(trap(len));

    }
}
